package com.ledi.pay.utill;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 文件名称： com.ledi.pay.utill.RedPackage.java<br/>
 * 初始作者： 钟小平<br/>
 * 创建日期： 2018年8月14日<br/>
 * 功能说明： 红包算法工具 <br/>
 * =================================================<br/>
 * 修改记录：<br/>
 * 修改作者 日期 修改内容<br/>
 * ================================================<br/>
 * Copyright (乐迪教育科技有限公司-幼儿事业部) 2017-2018.All rights reserved.<br/>
 */

public class RedPackageUtil {

	/**
	 * 方法描述: [获取红包.]<br/>
	 * 初始作者: 钟小平<br/>
	 * 创建日期: 2018年8月15日-上午10:54:19<br/>
	 * 开始版本: 2.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 * 
	 * @param number
	 *            红包数
	 * @param total
	 *            红包总额
	 * @return
	 *         List<Float> 获取红包
	 */
	public static List<String> getRed(int number, float total) {

		//
		// 红包数
		// int number = 10000;
		// // 红包总额
		// float total = 4000;
		List<String> redlistString = new ArrayList<String>();
		float money;
		// 最小红包
		double min = 0.13;
		double max;
		int i = 1;
		List<Float> math = new ArrayList<Float>();
		DecimalFormat df = new DecimalFormat("###.##");
		while (i < number) {
			// 保证即使一个红包是最大的了,后面剩下的红包,每个红包也不会小于最小值
			max = total - min * (number - i);
			int k = (number - i) / 2;
			// 保证最后两个人拿的红包不超出剩余红包
			if (number - i <= 2) {
				k = number - i;
			}
			// 最大的红包限定的平均线上下
			max = max / k;
			// 保证每个红包大于最小值,又不会大于最大值
			money = (int) (min * 100 + Math.random() * (max * 100 - min * 100 + 1));
			money = money / 100;
			// 保留两位小数
			money = Float.parseFloat(df.format(money));
			total = (int) (total * 100 - money * 100);
			total = total / 100;
			math.add(money);
			redlistString.add(money + "");
			System.out.println("第" + i + "个人拿到" + money + "剩下" + total);
			i++;
			// 最后一个人拿走剩下的红包
			if (i == number) {
				math.add(total);
				redlistString.add(total + "");
				System.out.println("第" + i + "个人拿到" + total + "剩下0");
			}
		}
		// 取数组中最大的一个值的索引
		System.out.println("本轮发红包中第" + (math.indexOf(Collections.max(math)) + 1) + "个人手气最佳");
		return redlistString;
	}
}
